home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2004 #2 / Amiga Plus CD - 2004 - No. 02.iso / AmigaPlus / Tools / Development / AmigaTalk / general / Integer.st < prev    next >
Encoding:
Text File  |  2004-01-31  |  4.1 KB  |  218 lines

  1. Class Integer :Number
  2. [
  3.    = aNumber
  4.  
  5.       ^ <primitive 6 self aNumber>
  6.          ifTrue:  [ <primitive 16 self aNumber> ]
  7.          ifFalse: [ super = aNumber ]
  8. |
  9.    > aNumber
  10.  
  11.       ^ <primitive 6 self aNumber>
  12.          ifTrue:  [ <primitive 13 self aNumber> ]
  13.          ifFalse: [ super > aNumber ]
  14. |
  15.    < aNumber
  16.  
  17.       ^ <primitive 6 self aNumber>
  18.          ifTrue:  [ <primitive 12 self aNumber> ]
  19.          ifFalse: [ super < aNumber ]
  20. |
  21.    + aNumber
  22.  
  23.       ^ <primitive 6 self aNumber>
  24.          ifTrue:  [ <primitive 10 self aNumber> ]
  25.          ifFalse: [ super + aNumber ]
  26. |
  27.    - aNumber
  28.  
  29.       ^ <primitive 6 self aNumber>
  30.          ifTrue:  [<primitive 11 self aNumber>]
  31.          ifFalse: [ super - aNumber ]
  32. |
  33.    * aNumber
  34.  
  35.       ^ <primitive 6 self aNumber>
  36.          ifTrue:  [<primitive 18 self aNumber>]
  37.          ifFalse: [ super * aNumber ]
  38. |
  39.    / aNumber
  40.  
  41.       ^ self asFloat / aNumber
  42. |
  43.    allMask: anInteger
  44.  
  45.       ^ anInteger = <primitive 23 self anInteger>
  46. |
  47.    anyMask: anInteger
  48.  
  49.       ^ 0 ~= <primitive 23 self anInteger>
  50. |
  51.    asCharacter
  52.  
  53.       ^ <primitive 36 self>
  54. |
  55.    asFloat
  56.  
  57.       ^ <primitive 39 self >
  58. |
  59.    asString
  60.  
  61.       ^ <primitive 37 self>
  62. |
  63.    bitAnd: anInteger
  64.  
  65.       ^ <primitive 23 self anInteger>
  66. |
  67.    bitAt: anInteger
  68.  
  69.       ^ <primitive 21 self anInteger>
  70. |
  71.    bitInvert
  72.  
  73.       ^ <primitive 33 self>
  74. |
  75.    bitOr: anInteger
  76.  
  77.       ^ <primitive 22 self anInteger>
  78. |
  79.    bitShift: anInteger
  80.  
  81.       ^ <primitive 25 self anInteger>
  82. |
  83.    bitXor: anInteger
  84.  
  85.       ^ <primitive 24 self anInteger>
  86. |
  87.    even
  88.  
  89.       ^ (self rem: 2) = 0
  90. |
  91.    factorial
  92.  
  93.       ^ <primitive 38 self>
  94. |
  95.    gcd: anInteger
  96.  
  97.       ^ <primitive 6 self anInteger>
  98.          ifTrue:  [<primitive 20 self anInteger>]
  99.          ifFalse: [self opError]
  100. |
  101.    highBit
  102.  
  103.       ^ <primitive 34 self>
  104. |
  105.    lcm: anInteger
  106.  
  107.       ^ <primitive 6 self anInteger>
  108.          ifTrue:  [self * anInteger quo: (self gcd: anInteger)]
  109.          ifFalse: [self opError]
  110. |
  111.    noMask: anInteger
  112.  
  113.       ^ 0 = (self bitAnd: anInteger)
  114. |
  115.    odd
  116.  
  117.       ^ (self rem: 2) ~= 0
  118. |
  119.    quo: anInteger
  120.  
  121.       ^ <primitive 6 self anInteger>
  122.          ifTrue:  [<primitive 28 self anInteger>]
  123.          ifFalse: [self opError]
  124. |
  125.    // aNumber                        "see quo also"
  126.  
  127.       ^ <primitive 6 self aNumber>
  128.          ifTrue:  [<primitive 19 self aNumber>]
  129.          ifFalse: [self opError]
  130. |
  131.    radix: aNumber
  132.  
  133.       ^ <primitive 26 self aNumber true true>
  134. |
  135.    print
  136.    
  137.       (self > 255)
  138.          ifTrue:  [ <primitive 121 (self asHex)>       ]
  139.          ifFalse: [ <primitive 121 (self printString)> ]
  140. |
  141.    asHex
  142.  
  143.       ^ <primitive 26 self 16 false true>
  144. |
  145.    asBinary
  146.  
  147.       ^ <primitive 26 self 2 false true>
  148. |
  149.    asOctal
  150.  
  151.       ^ <primitive 26 self 8 false true>
  152. |
  153.    asSignedHex
  154.  
  155.       ^ <primitive 26 self 16 true true>
  156. |
  157.    asSignedBinary
  158.  
  159.       ^ <primitive 26 self 2 true true>
  160. |
  161.    asSignedOctal
  162.  
  163.       ^ <primitive 26 self 8 true true>
  164. |
  165.    asBareHex
  166.  
  167.       " The radix is NOT generated for this method "
  168.       ^ <primitive 26 self 16 false false>
  169. |
  170.    asBareBinary
  171.  
  172.       " The radix is NOT generated for this method "
  173.       ^ <primitive 26 self 2 false false>
  174. |
  175.    asBareOctal
  176.  
  177.       " The radix is NOT generated for this method "
  178.       ^ <primitive 26 self 8 false false>
  179. |
  180.    asBareSignedHex
  181.  
  182.       " The radix is NOT generated for this method "
  183.       ^ <primitive 26 self 16 true false>
  184. |
  185.    asBareSignedBinary
  186.  
  187.       " The radix is NOT generated for this method "
  188.       ^ <primitive 26 self 2 true false>
  189. |
  190.    asBareSignedOctal
  191.  
  192.       " The radix is NOT generated for this method "
  193.       ^ <primitive 26 self 8 true false>
  194. |
  195.    rem: anInteger
  196.  
  197.       ^ <primitive 6 self anInteger>
  198.          ifTrue:  [<primitive 29 self anInteger>]
  199.          ifFalse: [self opError]
  200. |
  201.    intNegRem: aNumber ! i !
  202.  
  203.       ^ <primitive 6 self aNumber>  "Used to be '\\', not intNegRem:"
  204.          ifTrue:  [i <- self * ( (self < 0)
  205.                                   ifTrue: [ -1 ] 
  206.                                  ifFalse: [  1 ] ).
  207.            
  208.                    i rem: aNumber ]
  209.  
  210.         ifFalse:  [self opError]
  211. |
  212.    timesRepeat: aBlock ! i !
  213.  
  214.       i <- 0.
  215.  
  216.       [i < self] whileTrue: [aBlock value. i <- i + 1]
  217. ]
  218.